VK2Name = {
    0x01:'LeftButton',
    0x02:'RightButton',
    0x03:'CancelButton',
    0x04:'MiddleButton',
    0x05:'x1Button',
    0x06:'x2Button',
    0x07:'Undefined',
    0x08:'Backspace',
    0x09:'Tab',
    0x0A:'Undefined',
    0x0B:'Undefined',
    0x0C:'Clear',
    0x0D:'Enter',
    0x0E:'Undefined',
    0x0F:'Undefined',
    0x10:'Shift',
    0x11:'Ctrl',
    0x12:'Alt',
    0x13:'Pause',
    0x14:'CapsLock',
    0x15:'Kana',
    0x16:'Undefined',
    0x17:'Junja',
    0x18:'Final',
    0x19:'Kanji',
    0x1A:'IMEOFF',
    0x1B:'Escape',
    0x1C:'IMEConvert',
    0x1D:'IMENonconvert',
    0x1E:'IMEAccept',
    0x1F:'IMEModeChange',
    0x20:'Space',
    0x21:'PageUp',
    0x22:'PageDown',
    0x23:'End',
    0x24:'Home',
    0x25:'Left',
    0x26:'Up',
    0x27:'Right',
    0x28:'Down',
    0x29:'Select',
    0x2A:'Print',
    0x2B:'Execute',
    0x2C:'PrintScreen',
    0x2D:'Insert',
    0x2E:'Delete',
    0x2F:'Help',
    0x30:'0',
    0x31:'1',
    0x32:'2',
    0x33:'3',
    0x34:'4',
    0x35:'5',
    0x36:'6',
    0x37:'7',
    0x38:'8',
    0x39:'9',
    0x3A:'Undefined',
    0x3B:'Undefined',
    0x3C:'Undefined',
    0x3D:'Undefined',
    0x3E:'Undefined',
    0x3F:'Undefined',
    0x40:'Undefined',
    0x41:'A',
    0x42:'B',
    0x43:'C',
    0x44:'D',
    0x45:'E',
    0x46:'F',
    0x47:'G',
    0x48:'H',
    0x49:'I',
    0x4A:'J',
    0x4B:'K',
    0x4C:'L',
    0x4D:'M',
    0x4E:'N',
    0x4F:'O',
    0x50:'P',
    0x51:'Q',
    0x52:'R',
    0x53:'S',
    0x54:'T',
    0x55:'U',
    0x56:'V',
    0x57:'W',
    0x58:'X',
    0x59:'Y',
    0x5A:'Z',
    0x5B:'Win', # Left Windows
    0x5C:'Win', # Right Windows
    0x5D:'Apps',
    0x5E:'Undefined',
    0x5F:'Sleep',
    0x60:'NumPad0',
    0x61:'NumPad1',
    0x62:'NumPad2',
    0x63:'NumPad3',
    0x64:'NumPad4',
    0x65:'NumPad5',
    0x66:'NumPad6',
    0x67:'NumPad7',
    0x68:'NumPad8',
    0x69:'NumPad9',
    0x6A:'*',
    0x6B:'+',
    0x6C:'\\', # Numpad Separator
    0x6D:'-',
    0x6E:'.',
    0x6F:'/',
    0x70:'F1',
    0x71:'F2',
    0x72:'F3',
    0x73:'F4',
    0x74:'F5',
    0x75:'F6',
    0x76:'F7',
    0x77:'F8',
    0x78:'F9',
    0x79:'F10',
    0x7A:'F11',
    0x7B:'F12',
    0x7C:'F13',
    0x7D:'F14',
    0x7E:'F15',
    0x7F:'F16',
    0x80:'F17',
    0x81:'F18',
    0x82:'F19',
    0x83:'F20',
    0x84:'F21',
    0x85:'F22',
    0x86:'F23',
    0x87:'F24',
    0x88:'Undefined',
    0x89:'Undefined',
    0x8A:'Undefined',
    0x8B:'Undefined',
    0x8C:'Undefined',
    0x8D:'Undefined',
    0x8E:'Undefined',
    0x8F:'Undefined',
    0x90:'NumLock',
    0x91:'ScrollLock',
    0x92:'OEMSpecific',
    0x93:'OEMSpecific',
    0x94:'OEMSpecific',
    0x95:'OEMSpecific',
    0x96:'OEMSpecific',
    0x97:'Undefined',
    0x98:'Undefined',
    0x99:'Undefined',
    0x9A:'Undefined',
    0x9B:'Undefined',
    0x9C:'Undefined',
    0x9D:'Undefined',
    0x9E:'Undefined',
    0x9F:'Undefined',
    0xA0:'Shift', # Left Shift
    0xA1:'Shift', # Right Shift
    0xA2:'Ctrl', # Left Ctrl
    0xA3:'Ctrl', # Right Ctrl
    0xA4:'Alt', # Left Alt
    0xA5:'Alt', # Right Alt
    0xA6:'BrowserBack',
    0xA7:'BrowserForward',
    0xA8:'BrowserRefresh',
    0xA9:'BrowserStop',
    0xAA:'BrowserSearch',
    0xAB:'BrowserFavorites',
    0xAC:'BrowserHome',
    0xAD:'VolumeMute',
    0xAE:'VolumeDown',
    0xAF:'VolumeUp',
    0xB0:'MediaNextTrack',
    0xB1:'MediaPrevTrack',
    0xB2:'MediaStop',
    0xB3:'MediaPlayPause',
    0xB4:'LaunchMail',
    0xB5:'SelectMedia',
    0xB6:'LaunchApp1',
    0xB7:'LaunchApp2',
    0xB8:'Undefined',
    0xB9:'Undefined',
    0xBA:'OEM1',
    0xBB:'OEMPlus',
    0xBC:'OEMComma',
    0xBD:'OEMMinus',
    0xBE:'OEMPeriod',
    0xBF:'OEM2',
    0xC0:'OEM3',
    0xC1:'Undefined',
    0xC2:'Undefined',
    0xC3:'Undefined',
    0xC4:'Undefined',
    0xC5:'Undefined',
    0xC6:'Undefined',
    0xC7:'Undefined',
    0xC8:'Undefined',
    0xC9:'Undefined',
    0xCA:'Undefined',
    0xCB:'Undefined',
    0xCC:'Undefined',
    0xCD:'Undefined',
    0xCE:'Undefined',
    0xCF:'Undefined',
    0xD0:'Undefined',
    0xD1:'Undefined',
    0xD2:'Undefined',
    0xD3:'Undefined',
    0xD4:'Undefined',
    0xD5:'Undefined',
    0xD6:'Undefined',
    0xD7:'Undefined',
    0xD8:'Undefined',
    0xD9:'Undefined',
    0xDA:'Undefined',
    0xDB:'OEM4',
    0xDC:'OEM5',
    0xDD:'OEM6',
    0xDE:'OEM7',
    0xDF:'OEM8',
    0xE0:'OEMAX',
    0xE1:'OEM102',
    0xE2:'ICOHelp',
    0xE3:'ICO00',
    0xE4:'ProcessKey',
    0xE5:'ICOClear',
    0xE6:'Packet',
    0xE7:'Undefined',
    0xE8:'OEMReset',
    0xE9:'OEMJump',
    0xEA:'OEMPA1',
    0xEB:'OEMPA2',
    0xEC:'OEMPA3',
    0xED:'OEMWSCtrl',
    0xEE:'OEMCUSel',
    0xEF:'OEMATTN',
    0xF0:'OEMFinish',
    0xF1:'OEMCopy',
    0xF2:'OEMAuto',
    0xF3:'OEMENLW',
    0xF4:'OEMBackTab',
    0xF5:'OEMSpecific',
    0xF6:'Attn',
    0xF7:'CRSel',
    0xF8:'EXSel',
    0xF9:'EREOF',
    0xFA:'Play',
    0xFB:'Zoom',
    0xFC:'Noname',
    0xFD:'PA1',
    0xFE:'Clear',
}
ScanName2VKName = {
    'Left Shift':'Shift',
    'Right Shift':'Shift',
    'Left Ctrl':'Ctrl',
    'Right Ctrl':'Ctrl',
    'Ctrl':'Ctrl',
    'Left Alt':'Alt',
    'Right Alt':'Alt',
    'Alt':'Alt',
    'Left Windows':'Win',
    'Right Windows':'Win',
    'Win':'Win',
    'Caps Lock':'Caps_Lock',
    'Num Lock':'Num_Lock',
    'Scroll Lock':'Scroll_Lock',
    'Backspace':'Backspace',
    'Tab':'Tab',
    'Clear':'Clear',
    'Enter':'Enter',
    'Esc':'Esc',
    'Space':'Space',
    'Page Up':'Page_Up',
    'Page Down':'Page_Down',
    'End':'End',
    'Home':'Home',
    'delete':'Delete',
    'Insert':'Insert',
    'Print Screen':'Print_Screen',
}
Name2VK = {v:k for k,v in VK2Name.items()}